package com.callable;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;


public class FutureTaskTest {

	public static void main(String[] args) throws InterruptedException {
	System.out.println(Runtime.getRuntime().availableProcessors());
		
		ExecutorService executor = Executors.newCachedThreadPool();
		Task task = new Task();
		Task task1 = new Task();
		Task task2 = new Task();
		Future<Integer> result = executor.submit(task);
//		Future<Integer> result1 = executor.submit(task1);
//		Future<Integer> result2 = executor.submit(task2);
		Thread.sleep(1000);
//		cancel方法用来取消任务，如果取消任务成功则返回true，如果取消任务失败则返回false。
//		参数mayInterruptIfRunning表示是否允许取消正在执行却没有执行完毕的任务，如果设置true，则表示可以取消正在执行过程中的任务。
//		如果任务已经完成，则无论mayInterruptIfRunning为true还是false，此方法肯定返回false，即如果取消已经完成的任务会返回false；
//		如果任务正在执行，若mayInterruptIfRunning设置为true，则返回true，若mayInterruptIfRunning设置为false，则返回false；
//		如果任务还没有执行，则无论mayInterruptIfRunning为true还是false，肯定返回true。
		boolean cancel = result.cancel(true);
		System.out.println(cancel);
		
		
		executor.shutdown();

		try {
			Thread.sleep(1000);
		} catch (InterruptedException e1) {
			e1.printStackTrace();
		}

		System.out.println("主线程在执行任务");

		try {
			System.out.println("task运行结果" + result.get());
		} catch (InterruptedException e) {
			e.printStackTrace();
		} catch (ExecutionException e) {
			e.printStackTrace();
		}

		System.out.println("所有任务执行完毕");
	}
}

class Task implements Callable<Integer> {
	@Override
	public Integer call() throws Exception {
		System.out.println("子线程在进行计算");
		
		int sum = 0;
		for (int i = 0; i < 100; i++){
			sum += i;
			System.out.println(sum);
			Thread.sleep(100);
		}
			
		return sum;
	}
}
